/**
 * 文本处理工具类
 */
export class TextUtils {
  /**
   * 清理作者名称，移除前缀和多余空白
   */
  static cleanAuthorName(authorText: string): string {
    return authorText.replace(/^作者[:：]\s*/, '').trim();
  }

  /**
   * 提取字数中的数字
   */
  static extractWordCount(countText: string): number {
    const numberMatch = countText.match(/([\d.]+).*?万?/);
    if (!numberMatch) return 0;

    const number = parseFloat(numberMatch[1]);
    return countText.includes('万')
      ? Math.floor(number * 10000)
      : Math.floor(number);
  }

  /**
   * 标准化小说状态
   */
  static normalizeStatus(statusText: string): number {
    if (['完结', '完本'].includes(statusText)) return 2;
    if (['连载', '续传'].includes(statusText)) return 1;
    return 0; // 未知状态
  }

  /**
   * 清理更新时间，移除前缀
   */
  static cleanUpdateTime(updateText: string): string {
    return updateText.replace(/^更新时间[:：]\s*/, '').trim();
  }

  /**
   * 清理小说描述，移除多余空白和换行
   */
  static cleanDescription(description: string): string {
    return description.replace(/\s+/g, ' ').replace(/\n+/g, ' ').trim();
  }

  /**
   * 清理标签数组，用 || 分隔
   */
  static joinTags(tags: string[]): string {
    return tags
      .map((tag) => tag.trim())
      .filter((tag) => tag.length > 0)
      .join('||');
  }

  /**
   * 清理卷名，移除"卷"前缀
   */
  static cleanVolumeName(volumeText: string): string {
    return volumeText.replace(/^卷[：:]\s*/, '').trim();
  }

  /**
   * 从卷信息字符串中提取卷名和序号
   */
  static parseVolumeInfo(volumeText: string): { name: string; index: number } {
    const cleanText = this.cleanVolumeName(volumeText);
    const numberMatch = cleanText.match(
      /^第([一二三四五六七八九十百千万0-9]+)[卷部]/,
    );

    if (numberMatch) {
      const numberStr = numberMatch[1];
      const index =
        this.chineseNumberToArabic(numberStr) || parseInt(numberStr) || 0;
      const name = cleanText.replace(numberMatch[0], '').trim();
      return { name, index };
    }

    return { name: cleanText, index: 0 };
  }

  /**
   * 中文数字转阿拉伯数字
   */
  private static chineseNumberToArabic(chineseNum: string): number | null {
    const map: Record<string, number> = {
      一: 1,
      二: 2,
      三: 3,
      四: 4,
      五: 5,
      六: 6,
      七: 7,
      八: 8,
      九: 9,
      十: 10,
      百: 100,
      千: 1000,
      万: 10000,
    };

    if (chineseNum.length === 1) {
      return map[chineseNum] || null;
    }

    // 简单处理，如 "十二" -> 12
    let result = 0;
    let temp = 0;
    for (const char of chineseNum) {
      const num = map[char];
      if (num) {
        if (num >= 10) {
          result += temp * num;
          temp = 0;
        } else {
          temp = temp * 10 + num;
        }
      }
    }
    result += temp;
    return result || null;
  }

  /**
   * 安全地提取文本内容
   */
  static safeTextContent(element: Element | null): string {
    return element?.textContent?.trim() || '';
  }

  /**
   * 安全地提取属性值
   */
  static safeAttribute(element: Element | null, attribute: string): string {
    return element?.getAttribute(attribute)?.trim() || '';
  }

  /**
   * 从URL中提取章节ID或其他标识符
   */
  static extractChapterId(url: string): string {
    const match = url.match(/\/(\d+)\.html$/);
    return match ? match[1] : '';
  }

  /**
   * 标准化章节标题，移除卷前缀
   */
  static cleanChapterTitle(title: string, volumeName?: string): string {
    let cleanTitle = title.trim();

    // 如果提供了卷名，尝试从标题中移除
    if (volumeName) {
      const patterns = [
        new RegExp(`^${volumeName}\\s*[：:：]\\s*`),
        new RegExp(`^第[一二三四五六七八九十百千万0-9]+[卷部]\\s*[：:：]\\s*`),
      ];

      for (const pattern of patterns) {
        cleanTitle = cleanTitle.replace(pattern, '');
      }
    }

    return cleanTitle.trim();
  }

  /**
   * 格式化小说标签为查询友好的格式
   */
  static formatTagsForSearch(tags: string[]): string[] {
    return tags
      .map((tag) => tag.trim())
      .filter((tag) => tag.length > 0)
      .map((tag) => tag.replace(/[<>《》""'']/g, '')) // 移除特殊字符
      .slice(0, 10); // 限制标签数量
  }
}
